!(function ($) {
    $.fn.framework = function (options) {
        var that = this;
        return {
            bootstrapTable: function (options) {
                var DEFAULTS = {
                    height: 700,
                    undefinedText: '-',
                    method: 'get',
                    pagination: true,
                    sidePagination: 'server',
                    pageSize: 10,
                    pageList: [10, 20, 50, 'ALL'],
                    minimumCountColumns: 2,
                    search: true,
                    uniqueId: 'id',
                    toolbar: '#toolbar',
                    responseHandler: function (res) {
                        return {
                            total: res.totalElements,
                            rows: res.content
                        };
                    }
                };
                if (options.url) {
                    options.url = createUrl(options.url);
                }
                $.extend(DEFAULTS, options);
                that.bootstrapTable(DEFAULTS);
            },
            fileInput: function (options) {
                var DEFAULTS = {
                    language: 'zh', // 设置语言
                    maxFileCount: 9, // 表示允许同时上传的最大文件个数
                    allowedFileExtensions: ['jpeg', 'jpg', 'png', 'gif',
                        'bmp', 'tif', 'zip'],// 接收的文件后缀
                    showPreview: true, // 是否显示预览
                    uploadUrl: "/",
                    showUpload: false, // 是否显示上传按钮
                    showCaption: true, // 是否显示标题
                    showClose: false, // 关闭窗口
                    showUploadedThumbs: false,
                    dropZoneEnabled: false, // 是否允许拖拽
                    initialPreviewShowDelete: true, // 修改初始化时显示删除按钮
                    overwriteInitial: false, // 修改时不覆盖原有文件
                    maxImageWidth: 1500,
                    maxImageHeight: 1500,
                    maxFileSize: 14024,
                    previewSettings: {
                        image: {
                            width: "176px",
                        },
                        html: {
                            width: "176px"
                        },
                        text: {
                            width: "176px"
                        },
                        video: {
                            width: "176px"
                        },
                        audio: {
                            width: "176px"
                        },
                        flash: {
                            width: "176px"
                        },
                        object: {
                            width: "176px"
                        },
                        other: {
                            width: "176px"
                        }
                    },
                    browseClass: "btn btn-primary", // 按钮样式
                    defaultPreviewContent: '',
                    previewFileIcon: "<i class='glyphicon glyphicon-king'></i>"
                };
                $.extend(DEFAULTS, options);
                that.fileinput(DEFAULTS);
            }
        };
    }
})(jQuery);
function createUrl(url) {

    var pathName = window.document.location.pathname.replace("//", "/");
    var projectName = pathName
        .substring(0, pathName.substr(1).indexOf('/') + 1);
    return projectName + url;
}
var framework = {
    openWindow: function (url, width, height, title, allowScroll) {
        var index = layer.open({
            type: 2, // layer提供了5种层类型。可传入的值有：0（信息框，默认）1（页面层）2（iframe层）3（加载层）4（tips层）
            title: title,
            content: [url.indexOf("http") === 0 ? url : createUrl(url),
                allowScroll || 'yes'], // 不出现滚动条no
            area: [width, height],
            shadeClose: false, // 点击阴影是否关闭
            closeBtn: 1,
            shift: 1, // 目前shift可支持的动画类型有0-6
            maxmin: false
        });
        return index;
    },
    tips: function (msg, obj) {
        if (typeof obj == 'object') {
            layer.tips(msg, obj, {
                tips: [3, '#34A7FF'],
                time: 1000
            })
        } else {
            layer.tips(msg, $("#" + obj), {
                tips: [1, '#34A7FF']
            });
        }
    },
    alert: function (msg) {
        layer.alert(msg);
    },
    tabs: tabs
}
/**
 * nodeData{nodeId,href}
 *
 * @param nodeData
 */
function tabs(nodeData) {
    var DEFAULT = {
        $li: $('<li><a data-toggle="tab" style="padding: 9px 15px;"></a><span class="glyphicon glyphicon-close" style="font-size:12px;position: absolute; cursor: pointer; opacity: 0.8; right: 5%; display: none; top: 35%;">×</span></li>'),
        $tab: $('<div class="tab-pane fade in active" style="width:100%;height:100%"><iframe width="100%" height="100%" style="overflow-x: hidden; display: inline;" allowtransparency="true" frameborder="0"> </iframe></div>')
    }
    // 若没有href 不做任何处理
    if (nodeData.href) {
        // 若target为_self 直接跳转页面
        if (nodeData.target == '_self') {
            window.location.href = createUrl(nodeData.href);
            return;
        }
        // 已存在该节点则不追加节点，高亮显示当前节点
        var flag = false;
        $.each($('.nav.nav-tabs').children(), function () {
            if ($(this).attr('data-id') === String(nodeData.nodeId)) {
                $(this).find("a").tab('show');
                flag = true;
                return;
            }
        });
        if (!flag) {
            init(nodeData);
        }
        function init(nodeData) {
            initTab(nodeData);
            addEvent();
            showTab();
        }

        function initTab(nodeData) {
            DEFAULT.$li.attr('data-id', nodeData.nodeId);
            DEFAULT.$li.find('a').attr('href', '#page_' + nodeData.nodeId)
                .text(nodeData.text);
            DEFAULT.$tab.attr('id', 'page_' + nodeData.nodeId);
            DEFAULT.$tab.find('iframe').attr('src', createUrl(nodeData.href));
        }

        function addEvent() {
            // 添加右击事件
            DEFAULT.$li.mousedown(
                function (e) {
                    var $that = $(this);
                    var hrefIframe = $that.find("a").attr("href");
                    var $iframe = $(hrefIframe).find('iframe');
                    $that.contextMenu('myMenu1', {
                        bindings: {
                            'refresh': function (t) {
                                $that.find("a").tab('show');
                                $iframe.attr('src', $iframe.attr('src'));
                            },
                            'close': function (t) {
                                $iframe.parent().remove();
                                $that.prev().find("a").tab('show');
                                $that.remove();
                            },
                            'closeall': function (t) {
                                // TODO 待优化 移除除第一个div外所有元素
                                var iframes = $iframe.parent().parent()
                                    .children().slice(
                                        1,
                                        $iframe.parent().parent()
                                            .children().length)
                                    .remove();
                                $that.parent().children(":first").find("a")
                                    .tab('show');
                                $that.parent().children().slice(1,
                                    $that.parent().children().length)
                                    .remove();
                            }
                        }
                    });
                }).hover(function () {
                $(this).find('.glyphicon-close').show();
            }, function () {
                $(this).find('.glyphicon-close').hide();
            });
            // 绑定删除事件
            DEFAULT.$li.find('.glyphicon-close').on(
                'click',
                function () {
                    $(
                        '.tab-content div[id="'
                        + $(this).parent().find("a").attr(
                            "href").substring(1) + '"]')
                        .remove();
                    $(this).parent().prev().find("a").tab('show');
                    $(this).parent().remove();
                }).hide();
        }

        function showTab() {
            $(".nav.nav-tabs").append(DEFAULT.$li);
            $(".tab-content").append(DEFAULT.$tab);
            DEFAULT.$li.find("a").tab('show');
        }
    }
}